package cn.itcast.web.controller.company;

import cn.itcast.domain.company.Company;

import cn.itcast.service.company.CompanyService;
import cn.itcast.web.controller.BaseController;
import com.github.pagehelper.PageInfo;
import jdk.nashorn.internal.ir.annotations.Reference;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.stereotype.Controller;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;

import java.util.Date;

@Controller
@RequestMapping("/company")
public class CompanyController extends BaseController {

    // @Autowired
    @Reference
    private CompanyService companyService;

    /*
        作用： 展示企业的列表
        url: http://locallhost:8080/company/list.do
     */
    @RequestMapping("/list.do")
    // @RequiresPermissions("企业管理")
    public String list(@RequestParam(defaultValue = "1") int pageNum,@RequestParam(defaultValue = "6") int pageSize){
        // 硬编码方式(拦截方法,非web和web)
        // Subject subject = SecurityUtils.getSubject();
        // subject.checkPermission("企业管理");

        PageInfo<Company> pageInfo = companyService.findByPage(pageNum,pageSize);
        //存储到域中
        request.setAttribute("pageInfo",pageInfo);
        //返回展示页面列表的页面   前缀： /WEB-INF/pages/  后缀名： .jsp
        return "company/company-list";
    }

    /*
     如果参数是给Date类型传递数据，那么就是页面的字符串没法转换为Date类型
     ，需要你自定义类型转换器。
     自定义类型转换器的步骤：
            1. 自定义一个类去实现Converter接口
            2. 把自己的转换逻辑编写在方法中
            3. 在springmvc.xml文件上去注册
     */
    @RequestMapping("save")
    public String save(Date date){
        //如果一个页面出现了异常，我们没有处理，那么异常的信息就会抛出页面上，造成用户的体验不好。
        //异常的处理方案： 自定义一个异常处理器。
        int i = 1/0; //除数为0的异常
        System.out.println("老钟的生日："+date);
        return "success";
    }

    /*
    作用: 进入企业添加页面 company-add
    url ： /company/toAdd.do
    参数： 没有
     */

    @RequestMapping("toAdd")
    public String toAdd(){
        return "company/company-add";
    }


    /*
    作用: 保存添加企业
    url ： /company/edit.do
    参数： Company对象
    返回： 返回企业的列表页面
    注意： 整合提醒保存与更新都是使用了edit这个方法。
     */
    @RequestMapping("edit")
    public String edit(Company company){
        //如何区分当前用户是做保存还是更新的工作呢？
        //if(company.getId().equals("")||company.getId()==null){
         if(StringUtils.isEmpty(company.getId())){
            //保存
             companyService.save(company);
        }else{
            //更新
            companyService.update(company);
        }
        //返回值一旦添加redirect或者是forward，那么则没有经过视图解析器。
        //
        return "redirect:/company/list.do";

//        return "company/list.do"; // /WEB-INF/pages/company/list.do.jsp
    }



    /*
      作用: 进入修改企业页面
      url ： /company/toUpdate.do?id=ebf6c9a2-8c2d-482b-a509-d67c43cadb41
      参数： id 企业的id
      返回： 去到修改页面的页面company-update.jsp
   */
    @RequestMapping("toUpdate")
    public String toUpdate(String id){
        //1. 根据企业的id查找对应企业对象
        Company company = companyService.findById(id);
        //2. 把企业对象存储到域中
        request.setAttribute("company",company);
        //3. 返回到更新页面
        return "company/company-update";
    }


    /*
   作用: 根据id删除企业
   url ： //company/delete.do?id=ebf6c9a2-8c2d-482b-a509-d67c43cadb41
   参数： id 企业的id
   返回： 返回企业的列表页面
*/
    @RequestMapping("delete")
    public String delete(String id){
        companyService.delete(id);
        return "redirect:/company/list.do";
    }
}
